Technical Field
The present disclosure relates to storage systems and, more specifically, to logging of data, including metadata, in non-volatile random access memory (NVRAM) of a storage system.
Background
A storage system typically includes one or more storage devices, such as solid state drives (SSDs) embodied as flash storage devices, into which information may be entered, and from which the information may be obtained, as desired. The storage system may logically organize the information stored on the devices as storage containers, such as files or logical units (LUNs). These storage containers may be accessible by a host system using a data protocol over a network connecting the storage system to the host. Each storage container may be implemented as a set of data structures, such as data blocks that store data for the storage containers and metadata blocks that describe the data of the storage containers.
Some types of SSDs, especially those with NAND flash components, move data among those components at the granularity of a page (e.g., 8 kilobytes) and then only to previously erased pages. Typically, pages are erased exclusively in blocks of 32 or more pages (i.e., 256 KB or more). Accordingly, to store data from one or more input/output (I/O) requests, e.g., smaller than a page, an SSD may modify a page, then erase an entire block (e.g., 256 KB) and rewrite the entire block as modified by the data (i.e., less than a page, 8 KB). As a result, storage to SSD may be slow and inefficient, even slower than some traditional magnetic media disk drives. Thus, fast and efficient acknowledgement of the I/O requests by the storage system is desirable so as to reduce latency from the perspective of a host. To that end, some protocols permit data to be stored out-of-order, i.e., in different order to that which I/O requests from the host are received at the storage system.
However, data associated with an I/O request may be lost when power is interrupted on the storage system. This is particularly problematic when the I/O request, e.g., a write request, from the host has been acknowledged by the storage system and write data associated with the request has been sent to the one or more storage devices prior to a power loss, i.e., power is interrupted prior to permanent storage on the device. Recording, e.g., logging, the write request (including write data) to a persistent medium on the storage system and acknowledging the write request to the host reduces the window of storage system vulnerability, i.e., the time during which the storage system cannot guarantee persistent storing of the write request to the data container.
However, recording of the write request (including write data) along with eventual storage of the write data to the data container consumes storage system resources, such as I/O bandwidth. This is particularly acute in high I/O operations per second (IOPS) storage systems where recording each write request may involve multiple metadata accesses to storage which increases latency of write request acknowledgements to the host. Therefore, there is a need to provide low latency for acknowledgement of I/O requests while providing power loss resiliency by persistently logging those I/O requests.